示例展示了如何在 Kanzi Studio 中创建自定义的 3D 节点以及如何使用该节点。Kanzi 示例包含 Visual Studio 解决方案,它定义用于定义自定义节点的 Kanzi Engine 插件的 .dll;还包含一个 Kanzi Studio 工程,它使用插件系统在 Kanzi Studio 预览 (Preview) 中应用自定义节点中定义的行为。
您可以在 <KanziWorkspace>/Examples/Node3D_plugin 目录中找到本示例。
要了解如何创建Kanzi Engine 插件,请参阅创建 Kanzi Engine 插件。
示例中的两个自定义节点为:
Kanzi Studio 从插件 dll 中读取自定义节点使用的消息和属性类型的相关信息。
Kanzi Engine 使用插件中的签名调用一个函数,以注册插件
extern "C" { __declspec(dllexport) Module* createModule(uint32_t kanziVersionMajor, uint32_t kanziVersionMinor); }
旋钮 (Knob) 和转盘 (Spinner) 节点在您创建并由 createModule()
函数返回的模块中定义的 getMetaclassesOverride()
函数中注册。
为了注册转盘 (Spinner) 节点,转盘 (Spinner) 必须包含一个元类。通过使用 KZ_METACLASS_BEGIN
,您定义自定义节点并声明:
Node3D
)"Spinner"
)SpinnerUpdateLevelMessage
)TextBlockProperty
)KZ_METACLASS_BEGIN(Spinner, Node3D, "Spinner") KZ_METACLASS_MESSAGE_TYPE(SpinnerUpdateLevelMessage) KZ_METACLASS_PROPERTY_TYPE(TextBlockProperty) KZ_METACLASS_END()
在本示例中,转盘 (Spinner) 创建其消息类型 SpinnerUpdateLevelMessage
,指定其使用 SpinnerUpdateLevelMessageArguments
。
MessageType<Spinner::SpinnerUpdateLevelMessageArguments> Spinner::SpinnerUpdateLevelMessage(kzMakeFixedString("Message.Spinner.UpdateLevel"), KZ_DECLARE_EDITOR_METADATA ( //将消息名称设置为 Kanzi Studio 中显示的方式。 metadata.displayName = "Update Spinner Level"; //设置消息的工具提示。 metadata.tooltip = "Updates the Spinner level and outputs the level to a text block."; //不将消息显示为触发器。 //要在 Kanzi Studio 中将消息显示为动作,请执行此代码。 metadata["Listenable"] = "False"; ));
为了注册 SpinnerUpdateLevelMessage
的消息参数,SpinnerUpdateLevelMessageArguments
必须包含定义消息参数的元类。通过使用 KZ_MESSAGE_ARGUMENTS_METACLASS_BEGIN
,您定义自定义消息的参数并声明:
MessageArguments
)"Spinner Update Level Message Arguments"
)SpinnerLevelAlterationProperty
)KZ_MESSAGE_ARGUMENTS_METACLASS_BEGIN(SpinnerUpdateLevelMessageArguments, MessageArguments, "Spinner Update Level Message Arguments") KZ_METACLASS_PROPERTY_TYPE(SpinnerLevelAlterationProperty) KZ_METACLASS_END()